from typing import Protocol

import numpy as np

from operating_platform.robot.robots.com_configs.cameras import (
    CameraConfig,
    IntelRealSenseCameraConfig,
    OpenCVCameraConfig,
)


# Defines a camera type
class Camera(Protocol):
    def connect(self): ...
    def read(self, temporary_color: str | None = None) -> np.ndarray: ...
    def async_read(self) -> np.ndarray: ...
    def disconnect(self): ...


# def make_cameras_from_configs(camera_configs: dict[str, CameraConfig]) -> list[Camera]:
#     cameras = {}

#     for key, cfg in camera_configs.items():
#         if cfg.type == "opencv":
#             from lerobot.common.robot_devices.cameras.opencv import OpenCVCamera

#             cameras[key] = OpenCVCamera(cfg)

#         elif cfg.type == "intelrealsense":
#             from lerobot.common.robot_devices.cameras.intelrealsense import IntelRealSenseCamera

#             cameras[key] = IntelRealSenseCamera(cfg)
#         else:
#             raise ValueError(f"The camera type '{cfg.type}' is not valid.")

#     return cameras


# def make_camera(camera_type, **kwargs) -> Camera:
#     if camera_type == "opencv":
#         from lerobot.common.robot_devices.cameras.opencv import OpenCVCamera

#         config = OpenCVCameraConfig(**kwargs)
#         return OpenCVCamera(config)

#     elif camera_type == "intelrealsense":
#         from lerobot.common.robot_devices.cameras.intelrealsense import IntelRealSenseCamera

#         config = IntelRealSenseCameraConfig(**kwargs)
#         return IntelRealSenseCamera(config)

#     else:
#         raise ValueError(f"The camera type '{camera_type}' is not valid.")
